package com.arquitectonic.client.interfaz.grillas;

import com.arquitectonic.client.datosYlogica.GestorStakeholders;
import com.arquitectonic.client.datosYlogica.GestorVistas;
import com.arquitectonic.client.datosYlogica.vistas.Vista;
import com.arquitectonic.compartido.Seccion;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.events.EditCompleteEvent;
import com.smartgwt.client.widgets.grid.events.EditCompleteHandler;
import com.smartgwt.client.widgets.grid.events.EditorExitEvent;
import com.smartgwt.client.widgets.grid.events.EditorExitHandler;

public class ListGridVistas extends ListGrid implements EditorExitHandler, EditCompleteHandler{
	
	public static ListGridVistas getInstance(){
		if (singleton==null){
			singleton=new ListGridVistas();
		}
		return singleton;
	}
	static private ListGridVistas singleton=null;
	
	private ListGridVistas(){
	   super();
	   //Parametros de la grilla     
	   this.setWidth100();  
	   this.setHeight100(); 
	   this.setOverflow(Overflow.AUTO);
	     
	    //Campos de la grilla
		    
       ListGridField nombre = new ListGridField("nombreVista", "Nombre");  
       ListGridField costo = new ListGridField("costo", "Costo");
       ListGridField nivelDeDetalle = new ListGridField("nivelDeDetalle", "Nivel de detalle");

       ListGridField tipo = new ListGridField("tipo","Tipo");
       tipo.setValueMap(GestorStakeholders.tiposDeVistasPosibles);
       tipo.setCanEdit(true);
       tipo.setDefaultValue(0);
       
       this.setFields(nombre,costo,nivelDeDetalle,tipo);  
	         
	   this.addEditorExitHandler(this);
	   this.addEditCompleteHandler(this);
	
	    GestorVistas.getInstance().setListGrid(this);
	    this.setAutoFetchData(true); 

	}
	
	int error=0;
	@Override
	public void onEditorExit(EditorExitEvent event) {
		
		if(event.getColNum()==3){
			int tipo=Vista.stringToTipo((String)event.getNewValue());
			if(tipo==-1)
				return;
			
			String nombreVista=event.getRecord().getAttribute("nombreVista");
			String nuevoTipo=(String)event.getNewValue();
			if(!nombreVista.equals(Seccion.VIEW_AND_BEYOND)){
				if(!nuevoTipo.equals(Seccion.VIEW_AND_BEYOND)){	
						GestorVistas.editarTipoVista(nombreVista, nuevoTipo);
						error=0;
				}else{
					SC.warn("No se puede asignar el tipo View and Beyond a una vista");
					error=1;
				}
			}else{
				SC.warn("No se puede cambiar el tipo de la vista View and Beyond");
				error=2;
			}
		}
		
		
		
	}

	@Override
	public void onEditComplete(EditCompleteEvent event) {
		//SC.warn("hola");
		Record r;
		switch(error){
			case 1:
				r=event.getOldRecord();
				r.setAttribute("tipo", "N/A");
				this.updateData(r);
				break;
			case 2:
				r=event.getOldRecord();
				r.setAttribute("tipo", Seccion.VIEW_AND_BEYOND);
				this.updateData(r);
				break;
		}
	}

}
